﻿#ifndef WRFLOWEDLAYOUT_H
#define WRFLOWEDLAYOUT_H

#include <QRect>
#include <QStyle>
#include <QLayout>
#include <QWidget>
#include "WRGlobal.h"

//表示流布局。
class WRSOFT_GUIAPP_COMMON_CLASS WRFlowedLayout : public QLayout
{
    Q_OBJECT

private:
    QList<QLayoutItem *> m_itemList;
    int m_hSpace;
    int m_vSpace;

    //执行布局。
    int doLayout(const QRect &rect, bool testOnly) const;
    //智能获取间距。
    int smartSpacing(QStyle::PixelMetric pm) const;

public:
    //初始化流布局器。
    explicit WRFlowedLayout(QWidget *parent = 0);
    //释放当前对象所占用的相关资源。
    ~WRFlowedLayout();

    //获取横向边界。
    int horizontalSpacing() const;
    //获取纵向边界。
    int verticalSpacing() const;

    //获取是否可以扩展空间。
    Qt::Orientations expandingDirections() const;

    //获取是否需要根据宽带计计算高度。
    bool hasHeightForWidth() const;
    //获取指定宽度的需要高度。
    int heightForWidth(int) const;

    //获取项目数量。
    int count() const;
    //添加子项目。
    void addItem(QLayoutItem *item);
    //获取指定位置的项目。
    QLayoutItem *itemAt(int index) const;
    //取出指定位置的项目。
    QLayoutItem *takeAt(int index);

    //插入元素。
    void insertWidget(int index, QWidget* widget);

    //获取最小尺寸。
    QSize minimumSize() const;
    //设置矩形空间。
    void setGeometry(const QRect &rect);
    //获取尺寸建议。
    QSize sizeHint() const;
};

#endif // WRFLOWEDLAYOUT_H
